package com.agencia.jsf;
import java.util.ArrayList;
import java.util.List;

import javax.faces.component.html.HtmlDataTable;
import javax.faces.component.html.HtmlInputHidden;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import agencia.Habitacion;
import agencia.exceptions.PrecioInferiorException;
import agencia.persistencia.HabitacionDAO;
	
public class AdministrarHabitacionesBean {

	

	    private HtmlDataTable 		dataTable;
	    private Habitacion 			dataItem 		= new Habitacion();
	    private HtmlInputHidden 	dataItemId		= new HtmlInputHidden();
	    private HtmlInputHidden 	dataItemIdHotel = new HtmlInputHidden();
		private List<Habitacion> 	habitaciones;
		private int 				cantidad 		= 0;
		private int 				proximoId		= 1;
		private	Long 				idHotel;

		public AdministrarHabitacionesBean() throws PrecioInferiorException {
			
			FacesContext context = FacesContext.getCurrentInstance();		
			HttpServletRequest request= (HttpServletRequest)context.getExternalContext().getRequest();
			Long idHotel = (Long)request.getAttribute("idHotel");		
			
			setIdHotel(idHotel);
			
			dataItemIdHotel.setValue(new Long(getIdHotel()));
			cargar();
		}
		
		private void cargar() throws PrecioInferiorException {
			
			HabitacionDAO habitacionDAO = new HabitacionDAO();
			habitaciones = habitacionDAO.findByIdHotel(idHotel);
			/*habitaciones = new ArrayList<Habitacion>();
				Long.valueOf(dataItemIdHotel.getValue().toString())
			Habitacion hab = new Habitacion();
			hab.setId(Long.valueOf(getProximoId()));
			hab.setNumero("101");
			hab.setPiso("1");
			hab.setCapacidad(3);
			hab.setIdHotel(getIdHotel());
			habitaciones.add(hab);*/

			cantidad = habitaciones.size();
			actualizarProximoId();
			
			/* Levantaria de la BD todos los servicios cuyo idPadre = hab.idPadre
			 * y tipoPadre = hab.getTipoPadre y debria agregarlos a la Habitacion
			 */
			
		}
		
		public void actualizarProximoId(){
			proximoId++;		
		}
		
		public int getProximoId(){
			return proximoId;
		}
		
		public String crear() {
			dataItem = new Habitacion();

			cantidad++;
			dataItemId.setValue(new Long(cantidad));
			
			return "editar";
		}

		public String editar() {
			// Obtengo la fila completa
		    dataItem = (Habitacion) dataTable.getRowData();
		    dataItemId.setValue(dataItem.getId());
		
			return "editar";
		}
		
		public String listarServicios() {
			dataItem = (Habitacion) dataTable.getRowData();
			
			FacesContext context = FacesContext.getCurrentInstance();		
			HttpServletRequest request= (HttpServletRequest)context.getExternalContext().getRequest();
			request.getSession().setAttribute("idPadre", dataItem.getId());
			request.getSession().setAttribute("tipoPadre", dataItem.getTipoPadre());	
			request.getSession().setAttribute("accionTerminar", "terminarHabitacion");
			return "listarServicios";
		}
		private void persistirHabitacion(){
			HabitacionDAO habitacionDAO = new HabitacionDAO();
			habitacionDAO.getSession().beginTransaction().begin();
			habitacionDAO.save(dataItem);
			habitacionDAO.getSession().beginTransaction().commit();
			
		}
		public String guardar() {
			//dataItem.setId(Long.valueOf(dataItemId.getValue().toString()));
			dataItem.setIdHotel(Long.valueOf(dataItemIdHotel.getValue().toString()));
			
			if (cantidad > habitaciones.size()){
				//dataItem.setId(Long.valueOf(getProximoId()));
				persistirHabitacion();
				habitaciones.add(dataItem);
				actualizarProximoId();
			}
			return "listar";
		}
		private void eliminarHabitacion(){
			HabitacionDAO habitacionDAO = new HabitacionDAO();
			habitacionDAO.getSession().beginTransaction().begin();
			habitacionDAO.delete(habitacionDAO.findById( dataItem.getId()));
			habitacionDAO.getSession().beginTransaction().commit();
			
		}
		public String eliminar(){
			dataItem = (Habitacion) dataTable.getRowData();
			eliminarHabitacion();
			habitaciones.remove(dataItem);
			cantidad--;
			return "listar";
		}

		public String listar() {
			return null;
		}

		public String volver() {
			/*FacesContext.getCurrentInstance().getApplication().getNavigationHandler()
				.handleNavigation(FacesContext.getCurrentInstance(),null,"volver");*/
				
			/*ExternalContext extCon = FacesContext.getCurrentInstance().getExternalContext();
			HttpSession session = (HttpSession) extCon.getSession(true);
			session.invalidate();*/
			
			// Si se creo uno nuevo, vuelvo el conteo hacia atras
			cantidad = habitaciones.size();

			return "volver";
		}
		

		//-------------------------------------
		
		public HtmlDataTable getDataTable() {
			return dataTable;
		}

		public void setDataTable(HtmlDataTable dataTable) {
			this.dataTable = dataTable;
		}

		public Habitacion getDataItem() {
			return dataItem;
		}

		public void setDataItem(Habitacion dataItem) {
			this.dataItem = dataItem;
		}

		public HtmlInputHidden getDataItemId() {
			return dataItemId;
		}

		public void setDataItemId(HtmlInputHidden dataItemId) {
			this.dataItemId = dataItemId;
		}

		public int getCantidad() {
			return cantidad;
		}

		public void setCantidad(int cantidad) {
			this.cantidad = cantidad;
		}

		public List<Habitacion> getHabitaciones() {
			return habitaciones;
		}

		public void setHabitaciones(List<Habitacion> habitaciones) {
			this.habitaciones = habitaciones;
		}

		public Long getIdHotel() {
			return idHotel;
		}

		public void setIdHotel(Long idHotel) {
			this.idHotel = idHotel;
		}

	}

